/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package proy2redes;

/**
 *
 * @author jose
 */
import java.net.*;
import java.io.*;

import java.util.Date;

public class drepH extends Thread {
  private Socket socket = null;

  private String rdirectorio; //quitar
  private String hostdmon;
  private int puertodmon;


  private BufferedReader inDmon = null;
  private PrintWriter outDmon = null;

  public drepH(Socket socket) {
    super();
    this.socket = socket;
  }

  public void inicValores(String rdirect, String hostD, int portD){
      this.rdirectorio = rdirect;
      this.hostdmon = hostD;
      this.puertodmon = portD;
  }

  public void inicValoresDmon(BufferedReader in, PrintWriter out){
      this.inDmon = in;
      this.outDmon = out;
  }

  private synchronized void enviarADmon(String mensaje){
      outDmon.println(mensaje);
  }

  private synchronized String recibirDeDmon(){
      try{
        return this.inDmon.readLine();
      } catch (IOException e){
          return "Error: Fallo al leer del servidor dmon";
      }
  }

  private boolean procesarComando(String comando,BufferedReader in,
            PrintWriter out,InputStream inS, OutputStream outS) throws IOException{
        String[] comA = comando.split("[\\s]+");
        String response;
        String nombreCom = comA[0];
        boolean terminar = false;
        if (nombreCom.equals("ldir")){
            String s = manejoArchivos.listarDirectorio(this.rdirectorio);
            System.out.println(s);

        } else if (nombreCom.equals("rdir")) {
            response = manejoArchivos.listarDirectorio(this.rdirectorio);
            out.println(response+".");
            System.out.println("termina rdir en servidor");
            
        } else if (nombreCom.equals("sube")) {
            //String arch = this.rdirectorio+"/"+comA[1];
            manejoArchivos.pegarArchivo(this.rdirectorio, inS);
            //manejoArchivos.recibirArchivo(arch, in);

            //System.out.print
        } else if (nombreCom.equals("baja")) {
            String arch = this.rdirectorio+"/"+comA[1];
            manejoArchivos.copiarArchivo(arch, outS);
            //manejoArchivos.enviarArchivo("baja", comA[1],
            //        this.rdirectorio, out);
        } else if (nombreCom.equals("cat")) {
            String arch = this.rdirectorio+"/"+comA[1];
            String s = manejoArchivos.contenido(arch);
            System.out.println(s);
        } else if (nombreCom.equals("QUIT")) {
            terminar = true;
            out.println(comando);
        }
        return terminar;
    }

  public void run() {
    String clientRequest;
    boolean quit = false;

    try {
        InputStream inS = socket.getInputStream();
        OutputStream outS = socket.getOutputStream();
      PrintWriter out = new PrintWriter(outS,true);
      BufferedReader in = new BufferedReader(
	      new InputStreamReader(inS));

      out.println("Servidor de Prueba en Java 1.2, " + new Date() );
      //manejoArchivos.pegarArchivo(socket.getInputStream());

      while( ! quit ) {
		try {
			// Que tiene que decirnos el cliente?
			clientRequest = in.readLine();
                        quit = this.procesarComando(clientRequest, in, out,inS,outS);

			/*if (clientRequest.startsWith("HELP")) {
				out.println("Vocabulario: HELP QUIT");
			} else
				if (clientRequest.startsWith("QUIT")) {
					quit = true;
				} else {manejo
					out.println("ERROR: Orden '" + clientRequest +"' no comprendida.");

					}
*/
			System.out.println("El cliente dice: " + clientRequest);

		} catch (IOException e) {
           		System.out.println("Excepcion E/S en server.in.readLine() " + e);
		} catch (Exception e) {
                    System.out.println(e);
                    break;
                }
	}
	//try {
	in.close();
	out.close();
	socket.close();

    } catch (IOException e) {
      System.out.println(e.getMessage());
    }
  }

}